
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

-- =============================================
-- Author:		ovalente
-- Create date: oct-2012
-- Description:	Recorre los precios de cada artículo y graba en un histórico los cambios detectados
-- =============================================
CREATE PROCEDURE [dbo].[ap_PreciosHistoricos] 
AS
BEGIN
	--Variables
	DECLARE 
		@cd_comercio _codigo,
		@cd_proveedor _codigo,
		@id_articulo _codigo,
		@precio_bruto _importe,
		@precio_neto _importe,
		@precio_ant _importe,
		@existe int
	
	--Declara un cursor con los precios actuales para compararlos con el histórico
	DECLARE precios_cursor CURSOR FAST_FORWARD FOR
		SELECT cd_comercio, cd_proveedor, id_articulo, precio_bruto, precio_neto
		FROM app_precios
		ORDER BY cd_comercio, id_articulo

	OPEN precios_cursor

	--Recorre el cursor
	FETCH NEXT FROM precios_cursor
		INTO @cd_comercio, @cd_proveedor, @id_articulo, @precio_bruto, @precio_neto
		
	WHILE @@FETCH_STATUS = 0
	BEGIN
		--Verifica si el registro existe en el histórico de precios
		SELECT @existe = COUNT(*)
		FROM App_historial_precios
		WHERE id_entidad = @cd_comercio
			and id_articulo = @id_articulo
		
		IF @existe=0	--No existe ==> Nuevo registro
			INSERT INTO App_historial_precios(id_entidad, id_proveedor, id_articulo, fe_precio, im_precio_base, im_precio_neto)
				VALUES(@cd_comercio, @cd_proveedor, @id_articulo, GETDATE(), @precio_bruto, @precio_neto)
		
		ELSE BEGIN		--Existe ==> Verifica diferencias con el último precio registrado
			SELECT TOP 1 @precio_ant = im_precio_neto
			FROM App_historial_precios
			WHERE id_entidad = @cd_comercio
				and id_articulo = @id_articulo
			ORDER BY fe_precio DESC
			
			IF @precio_ant <> @precio_neto	--El precio es distinto ==> Agrega el registro
				INSERT INTO App_historial_precios(id_entidad, id_proveedor, id_articulo, fe_precio, im_precio_base, im_precio_neto)
					VALUES(@cd_comercio, @cd_proveedor, @id_articulo, GETDATE(), @precio_bruto, @precio_neto)	
		END
		
		--Siguiente registro
		FETCH NEXT FROM precios_cursor
			INTO @cd_comercio, @cd_proveedor, @id_articulo, @precio_bruto, @precio_neto
	END
	
	--Cierra el cursor
	CLOSE precios_cursor
	DEALLOCATE precios_cursor

END
GO
